package com.cpxj.annotation;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface GuavaRetry {

    /**
     * 重试异常
     * 不填时默认为 Exception或者 Exception 的子类
     * @return
     */
    Class[] exceptionClass() default {};


    //重试次数
    int attemptNumber() default 3;


    /**
     * 重试策略
     *
     * @return
     */
    RetryStrategyEnum RetryStrategy() default RetryStrategyEnum.FIXTIME;

    /**
     * 重试间隔，只在 RetryStrategyEnum.FIXTIME 模式下生效
     */
    int retryTime() default 100;

    /**
     * 初始等待时间，只在RetryStrategyEnum.INCREMENTTIME 模式下生效
     */
    int initialSleepTime() default 100;


    /**
     * 递增时间 只在RetryStrategyEnum.INCREMENTTIME 模式下生效
     */
    int incrementSleepTime() default 100;

    /**
     * 时间单位
     * @return
     */
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;

}
